/**
 * Generali Solutions d'assurances - Tous droits réservés &copy; 2007 - 2010
 */

package fr.generali.accueilclient.opt.listenomcampagne.builder;

import fr.generali.accueilclient.opt.listenomcampagne.om.INomIdentifiant;
import fr.generali.accueilclient.opt.listenomcampagne.om.INomObjectifs;
import fr.generali.accueilclient.opt.listenomcampagne.om.INomProduit;
import fr.generali.accueilclient.opt.listenomcampagne.om.impl.DTONomIdentifiant;
import java.util.ArrayList;
import java.util.List;

/**
 * @author Holmes Kelly
 */
public class DTONomIdentifiantBuilder extends DTONomIdentifiantBuilderBase<DTONomIdentifiantBuilder> {

    /**
     * constructeur
     */
    public DTONomIdentifiantBuilder() {
        super(new DTONomIdentifiant());
    }

    /**
     * @return DTONomIdentifiantBuilder
     */
    public static DTONomIdentifiantBuilder dTONomIdentifiant() {
        return new DTONomIdentifiantBuilder();
    }

    /**
     * @return instance
     */
    public INomIdentifiant build() {
        return getInstance();
    }
}

/**
 * @author Holmes Kelly
 * @param <GeneratorT>
 */
class DTONomIdentifiantBuilderBase<GeneratorT extends DTONomIdentifiantBuilderBase<GeneratorT>> {

    /**
     * instance
     */
    private INomIdentifiant instance;

    /**
     * @param aInstance instance
     */
    protected DTONomIdentifiantBuilderBase(INomIdentifiant aInstance) {
        instance = aInstance;
    }

    /**
     * @return instance
     */
    protected INomIdentifiant getInstance() {
        return instance;
    }

    /**
     * @param aValue nom
     * @return GeneratorT
     */
    @SuppressWarnings("unchecked")
    public GeneratorT buildNom(String aValue) {
        instance.setNom(aValue);

        return (GeneratorT ) this;
    }

    /**
     * @param aValue identifiant
     * @return GeneratorT
     */
    @SuppressWarnings("unchecked")
    public GeneratorT buildIdentifiant(String aValue) {
        instance.setIdentifiant(aValue);

        return (GeneratorT ) this;
    }

    /**
     * @param aValue liste objectifs
     * @return GeneratorT
     */
    @SuppressWarnings("unchecked")
    public GeneratorT buildObjectifs(List<INomObjectifs> aValue) {
        instance.setObjectifs(aValue);

        return (GeneratorT ) this;
    }

    /**
     * @param aValue add element to liste objectifs
     * @return GeneratorT
     */
    @SuppressWarnings("unchecked")
    public GeneratorT buildAddedObjectif(INomObjectifs aValue) {
        if (instance.getObjectifs() == null) {
            instance.setObjectifs(new ArrayList<INomObjectifs>());
        }

        ((ArrayList<INomObjectifs> ) instance.getObjectifs()).add(aValue);

        return (GeneratorT ) this;
    }

    /**
     * @param aValue liste produits
     * @return GeneratorT
     */
    @SuppressWarnings("unchecked")
    public GeneratorT buildProduits(List<INomProduit> aValue) {
        instance.setProduits(aValue);

        return (GeneratorT ) this;
    }

    /**
     * @param aValue add produit to liste produits
     * @return GeneratorT
     */
    @SuppressWarnings("unchecked")
    public GeneratorT buildAddedProduit(INomProduit aValue) {
        if (instance.getProduits() == null) {
            instance.setProduits(new ArrayList<INomProduit>());
        }

        ((ArrayList<INomProduit> ) instance.getProduits()).add(aValue);

        return (GeneratorT ) this;
    }

    /**
     * @param aValue select
     * @return GeneratorT
     */
    @SuppressWarnings("unchecked")
    public GeneratorT buildSelected(boolean aValue) {
        instance.setSelected(aValue);

        return (GeneratorT ) this;
    }
}
